\begin{lstlisting}[caption=函数定义,label=src:function definition]
|\begin{tikzpicture}[overlay]
\ubrace{0.8,-1.5}{0.0,-1.5}{关键字~\key{func} 用于定义一个函数；}
%
\ubrace{2.9,-1.5}{0.9,-1.5}{函数可以绑定到特定的类型上。%
这叫做~\first{\emph{接收者}}{receiver}。有接收者的函数被称作%
~\index{方法}{method}。第~\ref{chap:interfaces} 章将对其进行说明；}
%
\ubrace{4.6,-1.5}{3.1,-1.5}{\emph{funcname} 是你函数的名字；}
%
\ubrace{5.9,-1.5}{4.7,-1.5}{\type{int} 类型的变量~\var{q} 作为输入参数。%
参数用~\first{\emph{pass-by-value}}{pass-by-value} 方式传递，意味着它们会被复制；}
%
\ubrace{7.7,-1.5}{6.1,-1.5}{%
变量~\var{r} 和~\var{s} 是这个函数的~\index{named return parameters}{命名返回值}。%
在~Go 的函数中可以返回多个值。参阅第~\pageref{sec:multiple return} 页的``\titleref{sec:multiple return}''。%
如果不想对返回的参数命名，只需要提供类型：\lstinline{(int,int)}。%
如果只有一个返回值，可以省略圆括号。如果函数是一个子过程，并且没有任何返回值，也可以省略这些内容；}
%
\ubrace{10.7,-1.5}{8.0,-1.5}{这是函数体。注意~\func{return} 是一个语句，所以包裹参数的括号是可选的。}
\end{tikzpicture}|
type mytype int	|\coderemark{新的类型，参阅第~\ref{chap:beyond} 章}|

func (p mytype) funcname(q int) (r,s int) { return 0,0 }
||
\end{lstlisting}
